﻿/*
 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */

CKEDITOR.dialog.add('specialchar', function (a) {
    var b, c = function (i) {
        var j, k;
        if (i.data)j = i.data.getTarget(); else j = new CKEDITOR.dom.element(i);
        if (j.getName() == 'a' && (k = j.getChild(0).getHtml())) {
            j.removeClass('cke_light_background');
            b.hide();
            a.insertHtml(k);
        }
    }, d = CKEDITOR.tools.addFunction(c), e, f = function (i, j) {
        var k;
        j = j || i.data.getTarget();
        if (j.getName() == 'span')j = j.getParent();
        if (j.getName() == 'a' && (k = j.getChild(0).getHtml())) {
            if (e)g(null, e);
            var l = b.getContentElement('info', 'htmlPreview').getElement();
            b.getContentElement('info', 'charPreview').getElement().setHtml(k);
            l.setHtml(CKEDITOR.tools.htmlEncode(k));
            j.getParent().addClass('cke_light_background');
            e = j;
        }
    }, g = function (i, j) {
        j = j || i.data.getTarget();
        if (j.getName() == 'span')j = j.getParent();
        if (j.getName() == 'a') {
            b.getContentElement('info', 'charPreview').getElement().setHtml('&nbsp;');
            b.getContentElement('info', 'htmlPreview').getElement().setHtml('&nbsp;');
            j.getParent().removeClass('cke_light_background');
            e = undefined;
        }
    }, h = CKEDITOR.tools.addFunction(function (i) {
        i = new CKEDITOR.dom.event(i);
        var j = i.getTarget(), k, l, m = i.getKeystroke();
        switch (m) {
            case 39:
                if (k = j.getParent().getNext()) {
                    l = k.getChild(0);
                    if (l.type == 1) {
                        l.focus();
                        g(null, j);
                        f(null, l);
                    }
                }
                i.preventDefault();
                break;
            case 37:
                if (k = j.getParent().getPrevious()) {
                    l = k.getChild(0);
                    l.focus();
                    g(null, j);
                    f(null, l);
                }
                i.preventDefault();
                break;
            case 38:
                if (k = j.getParent().getParent().getPrevious()) {
                    l = k.getChild([j.getParent().getIndex(), 0]);
                    l.focus();
                    g(null, j);
                    f(null, l);
                }
                i.preventDefault();
                break;
            case 40:
                if (k = j.getParent().getParent().getNext()) {
                    l = k.getChild([j.getParent().getIndex(), 0]);
                    if (l && l.type == 1) {
                        l.focus();
                        g(null, j);
                        f(null, l);
                    }
                }
                i.preventDefault();
                break;
            case 32:
                c({data:i});
                i.preventDefault();
                break;
            case 9:
                if (k = j.getParent().getNext()) {
                    l = k.getChild(0);
                    if (l.type == 1) {
                        l.focus();
                        g(null, j);
                        f(null, l);
                        i.preventDefault(true);
                    } else g(null, j);
                } else if (k = j.getParent().getParent().getNext()) {
                    l = k.getChild([0, 0]);
                    if (l && l.type == 1) {
                        l.focus();
                        g(null, j);
                        f(null, l);
                        i.preventDefault(true);
                    } else g(null, j);
                }
                break;
            case CKEDITOR.SHIFT + 9:
                if (k = j.getParent().getPrevious()) {
                    l = k.getChild(0);
                    l.focus();
                    g(null, j);
                    f(null, l);
                    i.preventDefault(true);
                } else if (k = j.getParent().getParent().getPrevious()) {
                    l = k.getLast().getChild(0);
                    l.focus();
                    g(null, j);
                    f(null, l);
                    i.preventDefault(true);
                } else g(null, j);
                break;
            default:
                return;
        }
    });
    return{title:a.lang.specialChar.title, minWidth:430, minHeight:280, buttons:[CKEDITOR.dialog.cancelButton], charColumns:17, chars:['!', '&quot;', '#', '$', '%', '&amp;', "'", '(', ')', '*', '+', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '&lt;', '=', '&gt;', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '&euro;', '&lsquo;', '&rsquo;', '&rsquo;', '&ldquo;', '&rdquo;', '&ndash;', '&mdash;', '&iexcl;', '&cent;', '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;', '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;', '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;', '&sup3;', '&acute;', '&micro;', '&para;', '&middot;', '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;', '&frac12;', '&frac34;', '&iquest;', '&Agrave;', '&Aacute;', '&Acirc;', '&Atilde;', '&Auml;', '&Aring;', '&AElig;', '&Ccedil;', '&Egrave;', '&Eacute;', '&Ecirc;', '&Euml;', '&Igrave;', '&Iacute;', '&Icirc;', '&Iuml;', '&ETH;', '&Ntilde;', '&Ograve;', '&Oacute;', '&Ocirc;', '&Otilde;', '&Ouml;', '&times;', '&Oslash;', '&Ugrave;', '&Uacute;', '&Ucirc;', '&Uuml;', '&Yacute;', '&THORN;', '&szlig;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&ouml;', '&divide;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&uuml;', '&uuml;', '&yacute;', '&thorn;', '&yuml;', '&OElig;', '&oelig;', '&#372;', '&#374', '&#373', '&#375;', '&sbquo;', '&#8219;', '&bdquo;', '&hellip;', '&trade;', '&#9658;', '&bull;', '&rarr;', '&rArr;', '&hArr;', '&diams;', '&asymp;'], onLoad:function () {
        var i = this.definition.charColumns, j = this.definition.chars, k = ['<table style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'], l = 0;
        while (l < j.length) {
            k.push('<tr>');
            for (var m = 0; m < i; m++, l++) {
                if (j[l])k.push('<td class="cke_dark_background" style="cursor: default"><a href="javascript: void(0);" style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="', j[l].replace(/&/g, '&amp;'), '" onkeydown="CKEDITOR.tools.callFunction( ' + h + ', event, this )"' + ' onclick="CKEDITOR.tools.callFunction(' + d + ', this); return false;"' + ' tabindex="-1">' + '<span style="margin: 0 auto;cursor: inherit">' + j[l] + '</span></a>'); else k.push('<td class="cke_dark_background">&nbsp;');
                k.push('</td>');
            }
            k.push('</tr>');
        }
        k.push('</tbody></table>');
        this.getContentElement('info', 'charContainer').getElement().setHtml(k.join(''));
    }, contents:[
        {id:'info', label:a.lang.common.generalTab, title:a.lang.common.generalTab, padding:0, align:'top', elements:[
            {type:'hbox', align:'top', widths:['320px', '90px'], children:[
                {type:'html', id:'charContainer', html:'', onMouseover:f, onMouseout:g, focus:function () {
                    var i = this.getElement().getChild([0, 0, 0, 0, 0]);
                    setTimeout(function () {
                        i.focus();
                        f(null, i);
                    });
                }, onShow:function () {
                    var i = this.getElement().getChild([0, 0, 0, 0, 0]);
                    setTimeout(function () {
                        i.focus();
                        f(null, i);
                    });
                }, onLoad:function (i) {
                    b = i.sender;
                }},
                {type:'hbox', align:'top', widths:['100%'], children:[
                    {type:'vbox', align:'top', children:[
                        {type:'html', html:'<div></div>'},
                        {type:'html', id:'charPreview', style:"border:1px solid #eeeeee;background-color:#EAEAD1;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", html:'<div>&nbsp;</div>'},
                        {type:'html', id:'htmlPreview', style:"border:1px solid #eeeeee;background-color:#EAEAD1;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", html:'<div>&nbsp;</div>'}
                    ]}
                ]}
            ]}
        ]}
    ]};
});
